import json

from cachetools import TTLCache
from threading import Lock

# 最多缓存 100 个用户，每个缓存有效期为 5 分钟（300秒）
user_cache = TTLCache(maxsize=100, ttl=300)
cache_lock = Lock()  # 因为 TTLCache 本身是线程安全的，但这可以保护更复杂的操作

from dataclasses import dataclass
from typing import Optional


@dataclass
class UserVO:
    user_id: str  # 用户Id
    name: str  # 姓名

    def to_dict(self):
        return {
            "userId": self.user_id,
            "name": self.name,
        }

    def to_json(self):
        return json.dumps(self.to_dict(), ensure_ascii=False)


def get_cached_user(uuid: str) -> Optional[UserVO]:
    return user_cache.get(uuid)


def cache_user(uuid: str, user_vo: UserVO):
    user_cache[uuid] = user_vo
